// 数组扁平化
let arr = [21, 12, [21, 11, [3, 4, 5], 6]]

// 1.递归的方式 
// let newResult=[]
// function flatFn(array) {
//   array.forEach(element => {
//     if (typeof element === 'object') {
//       flatFn(element)
//     } else { 
//       newResult.push(element)
//     }
//   });
//   return newResult
// }

// console.log(flatFn(arr))

// 2.join 方法
// let newStr = arr.join(',')
// let newArr = newStr.split(',').map(item=>+item)
// console.log(newArr)

// 3.扩展运算符 ...[]

// while (arr.some(i => Array.isArray(i))) {
//   arr = [].concat(...arr)
// }
// console.log(arr)

// 4.array.prototype.flat 数组扁平化
// let newArr = arr.flat(Infinity)
// // flat(Infinity)  flat(Infinity)
// console.log(newArr)

// 5.正则
let newStr = JSON.stringify(arr)
let result =`[${newStr.replace(/\[|\]/g, '')}]` 
console.log(JSON.parse(result))

// // console.log(arr.flat(Infinity)) //[21, 12, 21, 11, 3, 4, 5, 6]]

// let newarr=arr.flatMap(item => {
//   // console.log(item)
//   return item
// })
// console.log(newarr) //[ 21, 12, 21, 11, [ 3, 4, 5 ], 6 ] 此函数的解构深度为1

// 递归解决和尾递归的方式解决

// recursion([],arr)
// function recursion(newarr,arr) {
//   arr.forEach(item => {
//     if (typeof item === 'object') {
//       return recursion(newarr,item)
//     } else {
//       newarr.push(item)
//     }
//   })
// }
// console.log(newArr)

// 非递归处理树
// const arr=[
//   {
//     "id": 1,
//     "name": "中华人民共和国",
//     "parentId": 0,
//   },
//   {
//     "id": 1001,
//     "name": "浙江省",
//     "parentId": 1,
//   },
//   {
//     "id": 2001,
//     "name": "杭州市",
//     "parentId": 1001,
//   },
//   {
//     "id": 3001,
//     "name": "西湖区",
//     "parentId": 2001,
//   },
//   {
//     "id": 4001,
//     "name": "杭州市第一人民医院",
//     "parentId": 3001,
//   },
//   {
//     "id": 1002,
//     "name": "河北省",
//     "parentId": 1,
//   },
//   {
//     "id": 2002,
//     "name": "石家庄",
//     "parentId": 1002,
//   },
//   {
//     "id": 3002,
//     "name": "赵县",
//     "parentId": 2002,
//   },
//   {
//     "id": 4002,
//     "name": "北王里",
//     "parentId": 3002,
//   }
// ]

// 非递归的方式  ---孩子找妈妈
// const children = []
// arr.forEach(item => {
//   arr.forEach(item1 => {
//     if (item1.parentId === item.id) {
//       children.push(item1)
//     }
//   })
// })
// console.log(children)  // children

// const parent = arr.filter(item => item.parentId === 0)

// children.forEach(item => {
//   children.forEach(item1 => {
//     if (item.parentId === item1.id) {
//       item1.children=item
//     }
//   })
// })

// console.log(children)
